from django.db import models
from django.contrib.auth.models import User


class Catalog(models.Model):
    """
    资源分类表
    ID,  名字、 上一级分类ID（关系属性）,  录入时间、修改时间、是否删除
    """
    name = models.CharField(max_length=50, verbose_name='资源分类名称', null=False, blank=False)
    parent = models.ForeignKey('self', on_delete=models.CASCADE,
                               null=True, blank=True, verbose_name='上级分类')

    create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
    update_time = models.DateTimeField(auto_now=True, verbose_name='更新时间')
    is_delete = models.BooleanField(default=False, verbose_name='是否删除')

    class Meta:
        db_table = 'tb_catalog'


class Resource(models.Model):
    """
    资源表
    资源名、描述、关键字、所属分类（关系属性）、积分、资源存储路径、
	资源大小、浏览数量（不合适）、资源扩展名、 录入时间、
	资源等级(计算属性、不合适)、 下载次数 (不合适)、
	所属用户（关系属性）、 资源状态( 审核通过/未通过) 、
	原因 (未审核通过的原因) 、 审核人
	修改时间、是否删除 、 是否精选
    """
    name = models.CharField(max_length=50, verbose_name='资源名称', null=False, blank=False)
    desc = models.CharField(max_length=200, verbose_name='资源描述', null=True, blank=True)
    keyword = models.CharField(max_length=50, verbose_name='资源关键字', null=True, blank=True)
    classify = models.ForeignKey(to='Catalog', on_delete=models.CASCADE, verbose_name='所属分类', blank=True, null=True)

    score = models.IntegerField(default=0, verbose_name='资源积分', blank=True, null=True)
    path = models.FileField(upload_to='resource/', verbose_name='资源存储路径', blank=True, null=True)
    size = models.IntegerField(default=0, verbose_name='资源大小', null=False, blank=False)
    ext = models.CharField(max_length=10, verbose_name='资源扩展名', null=False, blank=False)

    create_time = models.DateTimeField(auto_now_add=True, verbose_name='录入时间', blank=True, null=True)
    update_time = models.DateTimeField(auto_now=True, verbose_name='修改时间', blank=True, null=True)
    user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name='所属用户'
                             , null=True, blank=True)
    state = models.CharField(max_length=10, verbose_name='资源状态', default='0',
                             choices=(('0', '待通过'), ('1', '审核通过'), ('-1', '未通过')), blank=True, null=True)

    reason = models.CharField(max_length=50, verbose_name='未通过原因', null=True, blank=True)

    admin = models.CharField(max_length=150, verbose_name='审核人', null=True, blank=True)

    is_best = models.BooleanField(verbose_name='是否精选', db_comment='是否精选', default=False)

    is_delete = models.BooleanField(default=False, verbose_name='是否删除', blank=True, null=True)

    class Meta:
        db_table = 'tb_resource'


class ResourceDownloadHistory(models.Model):
    """
    资源下载表
	资源（关系属性）,  用户（关系属性） 、下载时间
    """
    resource = models.ForeignKey(to='Resource', on_delete=models.CASCADE, verbose_name='资源')
    user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name='用户')
    download_time = models.DateTimeField(auto_now_add=True, verbose_name='下载时间', db_comment='下载时间')

    class Meta:
        db_table = 'tb_resource_download_history'


class ResourceComment(models.Model):
    """
    资源评论表
    资源（关系属性）、 评论用户（关系属性） 、
	资源星级、 评论内容， 评论时间、
	评论状态( 审核通过/未通过) 、
	原因 (未审核通过的原因) 、 审核人
	是否删除
    """
    resource = models.ForeignKey(to=Resource, on_delete=models.CASCADE, verbose_name='资源')
    user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name='评论用户')
    star = models.IntegerField(verbose_name='资源星级', default=5,db_comment='资源星级')
    content = models.TextField(verbose_name='评论内容', null=True, blank=True,db_comment='评论内容')
    comment_time = models.DateTimeField(auto_now_add=True, verbose_name='评论时间')

    state = models.CharField(max_length=10, verbose_name='资源状态', default='0',
                             choices=(('0', '待通过'), ('1', '审核通过'),('-1', '未通过')), db_comment='资源状态')

    reason = models.CharField(max_length=50, verbose_name='未通过原因', null=True, blank=True,db_comment='未通过原因')
    admin = models.CharField(max_length=150, verbose_name='审核人', null=True, blank=True,db_comment='审核人')
    is_delete = models.BooleanField(default=False, verbose_name='是否删除', db_comment='是否删除')
    class Meta:
        db_table = 'tb_resource_comment'

class ResourceCollect(models.Model):
    """
    资源收藏表
    资源（关系属性） 、 收藏用户（关系属性）、收藏时间
    """
    resource = models.ForeignKey(to=Resource, on_delete=models.CASCADE, verbose_name='资源')
    user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name='用户')
    collect_time = models.DateTimeField(auto_now_add=True, verbose_name='收藏时间',db_comment='收藏时间')

    class Meta:
        db_table = 'tb_resource_collect'


